Type enumerableType = typeof(Enumerable);
MemberInfo[] members = enumerableType.GetMember("Where*");
MethodInfo whereDef = (MethodInfo)members[0]; // Where<TSource>(IEnumerable<TSource, Func<TSource,Boolean>)
Type TSource = whereDef.GetGenericArguments()[0]; // TSource is the only generic argument
Type[] types = { typeof(IEnumerable<>).MakeGenericType(TSource), typeof(Func<,>).MakeGenericType(TSource, typeof(Boolean)) };
MethodInfo method = enumerableType.GetMethod("Where", types);
「ちなみに、GetMethodではなく、GetMethodsで列挙させて最初の1つを取得してくるという方法も試して上手く行ったが、【最初の1つ】という条件では将来拡張されたときに誤動作するからな。もっと調査を続けていたら見つかった」